import axios from 'axios'
// 引入pinia模块中的 用户信息模块
import { useUserStore } from '@/stores'
// 引入Element组件中的 信息提示组件
import { ElMessage } from 'element-plus'
// 引入路由
import router from '@/router'

const instance = axios.create({
  // 1、请求基地址 + 超时时间
  baseURL: 'http://big-event-vue-api-t.itheima.net',
  timeout: 5000
})

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 2、携带 token
  const userStore = useUserStore()
  // 判断有没有token
  if (userStore.token) {
    // 有token 就将token信息在请求接口的时候传递给服务器
    config.headers.Authorization = userStore.token
  }
  return config
}, function (error) {
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  // 3、响应成功 正常返回
  if (response.data.code === 0) {
    return response
  }

  // 4、获取异常 提示用户 抛出错误
  ElMessage.error(response.data.message || '服务异常')
  return Promise.reject(response.data)

}, function (error) {
  // 5、错误特殊情况（未登录/token失效） 拦截跳转
  if (error.response?.status === 401) {
    router.push('/login')
  }

  // 6、错误默认情况 直接给提示
  ElMessage.error(error.response.data.message || '服务异常')
  return Promise.reject(error)
})

export default instance